package com.sinog.biz.service.business.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sinog.biz.mapper.havexml.AzbjDatabaseInfoMapper;
import com.sinog.biz.service.business.AzbjDatabaseInfoService;
import com.sinog.core.domain.AzbjDatabaseInfo;
import com.sinog.core.util.JsonUtil;
import com.sinog.core.util.MapUtil;
import com.sinog.core.util.PageReturnUtil;
import com.sinog.core.utilbean.Result;
import com.sinog.core.utilbean.ReturnCode;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @desc 安帮工作资源管理 - 安帮资料信息管理 - 帮教资料 - AzbjDatabaseInfoServiceImpl
 * @author -
 * @date -
 */
@Service
public class AzbjDatabaseInfoServiceImpl extends ServiceImpl<AzbjDatabaseInfoMapper,AzbjDatabaseInfo> implements AzbjDatabaseInfoService {

    @Resource
    private AzbjDatabaseInfoMapper azbjDatabaseInfoMapper;

    /**
     * 安帮工作资源管理 - 安帮资料信息管理 - 帮教资料 - 列表
     * @param pageIndex pageIndex
     * @param pageSize pageSize
     * @param mapkey mapkey
     * @return String
     */
    @Override
    public String getAzbjDatabaseList(Integer pageIndex,Integer pageSize,Map<String,Object> mapkey) {
        Map<String, Object> conversionToMap = MapUtil.requestConversionToMap(mapkey);
        if(conversionToMap.isEmpty()) {
            return null;
        }
        Page<Map<String,String>> page = new Page<>((pageIndex + 1),pageSize);
        page = page.setRecords(azbjDatabaseInfoMapper.getAzbjDatabaseList(page,mapkey));
        return PageReturnUtil.pageReturn(page);
    }

    /**
     * 安帮工作资源管理 - 安帮资料信息管理 - 帮教资料 - （修改/新增）
     * @param data data
     * @return Result
     */
    @Override
    public Result saveAzbjDatabaseInfo(String data) {
        Date date = new Date();
        AzbjDatabaseInfo azbjDatabaseInfo = JsonUtil.toBean(data,AzbjDatabaseInfo.class);
        boolean tag = azbjDatabaseInfo.setCreateTime(date).setUptime(date).setUpdateUser(azbjDatabaseInfo.getCreateUser()).setUpdateTime(date).insertOrUpdate();
        if(tag) {
            return Result.success("保存成功");
        }
        return Result.failure(ReturnCode.SAVE_FAILED);
    }

    /**
     * 安帮工作资源管理 - 安帮资料信息管理 - 帮教资料 - 删除
     * @param id id
     * @return boolean
     */
    @Override
    public boolean deleteAzbjDatabaseInfo(String id) {
        AzbjDatabaseInfo azbjDatabaseInfo = new AzbjDatabaseInfo();
        azbjDatabaseInfo.setId(id);
        return azbjDatabaseInfo.deleteById(id);
    }

    /**
     * 安帮工作资源管理 - 安帮资料信息管理 - 帮教资料 - 保存下载次数
     * @param id id
     */
    @Override
    public void saveDownNum(String id) {
        //保证并发下更新下载次数错误问题
        synchronized(this) {
            AzbjDatabaseInfo databaseInfo = new AzbjDatabaseInfo().selectById(id);
            int num = databaseInfo.getDownnum();
            num++;
            databaseInfo.setDownnum(num).insertOrUpdate();
        }
    }

    /**
     * 安帮工作资源管理 - 安帮资料信息管理 - 帮教资料 - 获取是否是自己发布的
     * @param map map
     * @return int 返回>1是自己发布的，否则不是
     */
    @Override
    public int checkIfOwnerPublish(Map<String,Object> map) {
        return azbjDatabaseInfoMapper.checkIfOwnerPublish(map);
    }

    /**
     * 安帮工作资源管理 - 安帮资料信息管理 - 帮教资料 - 发布/取消发布
     * @param id id
     * @param stateValue stateValue
     * @return Result
     */
    @Override
    public Result setfabuState(String id,String stateValue) {
        AzbjDatabaseInfo fabuStateInfo = new AzbjDatabaseInfo().selectById(id);
        boolean tag = fabuStateInfo.setFabustate(stateValue).insertOrUpdate();
        if(tag) {
            return Result.success();
        }
        return Result.failure(ReturnCode.FAILURE);
    }

    /**
     * 安帮工作资源管理 - 安帮资料信息管理 - 帮教资料 - 导出
     * @param mapkey mapkey
     * @return List<Map < String,Object>>
     */
    @Override
    public List<Map<String,Object>> selectAzbjDatabaseInfoForExport(Map<String,Object> mapkey) {
        return azbjDatabaseInfoMapper.selectAzbjDatabaseInfoForExport(mapkey);
    }
}